abstract class interface difference